﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller;
using Interfaces;
using Model;

namespace GUI
{
    public partial class FrmTilbud : Form
    {
        private vandspareSystem VandspareSystem;
        List<modul> Tekstboxliste;//dynamisk oprettelse af tekstboxe
        List<IInstallation> InstListe;//liste af aktuelle kundes - aktuelle virksomheds installationer
        double besparelse;
        List<IArtikel> ArtikelListe;
        DateTime dato;//til tilbudsrapporten

        class modul
        {
            public TextBox txt;
            public Label label;
            public ComboBox cbobox;
            public TextBox pris;
            public TextBox saml;

            public modul(string txt, List<IArtikel> ArtList)
            {
                this.txt = new TextBox();
                label = new Label();
                label.Width = 100;
                this.label.Text = txt;
                this.cbobox = new ComboBox();
                foreach (IArtikel Iartikel in ArtList)
	            {
                    cbobox.Items.Add(Iartikel.Beskrivelse);
	            }
                this.pris = new TextBox();
                this.saml = new TextBox();  
            }          
        }


        public FrmTilbud(vandspareSystem VandspareSystem, double besparelse)
        {
            InitializeComponent();
            LåsTextbokse();
            btnUdskriv.Enabled = false;

            txtKunde.Enabled = false;
            txtvirksomhedstype.Enabled = false;

            this.VandspareSystem = VandspareSystem;
            this.besparelse = besparelse;
            InstListe = new List<IInstallation>();
            FyldInstListe();
            Tekstboxliste = new List<modul>();
            FyldTextBoxListe();
            
            loadmoduler();

            txtKunde.Text = VandspareSystem.aktuelKunde.Navn;
            txtvirksomhedstype.Text = VandspareSystem.aktuelVirksomhedsData.Navn;
        }


        private void FyldTextBoxListe()
        {
            for (int i = 0; i < InstListe.Count; i++)
            {
                ArtikelListe = new List<IArtikel>();
                ArtikelListe = VandspareSystem.HentArtikelListe();
                Tekstboxliste.Add(new modul(InstListe[i].Betegnelse, ArtikelListe));
            }
        }


        private void FyldInstListe()
        {
            InstListe = VandspareSystem.hentAktVirkDataInst();
        }


        private void LåsTextbokse()
        {
            txtbespar.Enabled = false;
            txttilbagebetalingstid.Enabled = false;
            txttilbudspris.Enabled = false;
        }


        private void loadmoduler()
        {
            panel.Controls.Clear();
            for (int i = 0; i < Tekstboxliste.Count; i++)
            {
                Tekstboxliste[i].label.Location = new Point(10, (i + 0) * 30);
                Tekstboxliste[i].txt.Location = new Point(140, (i + 0) * 30);
                Tekstboxliste[i].cbobox.Location = new Point(300, (i + 0) * 30);
                Tekstboxliste[i].pris.Location = new Point(450, (i + 0) * 30);
                Tekstboxliste[i].saml.Location = new Point(570, (i + 0) * 30);
                Tekstboxliste[i].pris.Enabled = false;
                Tekstboxliste[i].saml.Enabled = false;

                this.panel.Controls.Add(Tekstboxliste[i].label);
                this.panel.Controls.Add(Tekstboxliste[i].txt);
                this.panel.Controls.Add(Tekstboxliste[i].cbobox);
                this.panel.Controls.Add(Tekstboxliste[i].pris) ;
                this.panel.Controls.Add(Tekstboxliste[i].saml);
            }
        }


        private void btnBeregnTilbud_Click(object sender, EventArgs e)
        {
            double koebssum = 0;

            for (int i = 0; i < Tekstboxliste.Count; i++)
            {
                if (Tekstboxliste[i].cbobox.SelectedIndex != -1)
                {
                    bool res;
                    int attribut;
                    res = int.TryParse(Tekstboxliste[i].txt.Text, out attribut);
                    if (!res)
                    {
                        lblStatus.Text = "Fejl i indtastning!";
                        Tekstboxliste[i].txt.Focus();
                        btnUdskriv.Enabled = false;
                        return;
                    }

                    if (Convert.ToInt32(Tekstboxliste[i].txt.Text) == 0)
                    {
                        lblStatus.Text = "Fejl i indtastning - Antal må ikke være 0!";
                        Tekstboxliste[i].txt.Focus();
                        btnUdskriv.Enabled = false;
                        return;
                    }
                }
                else
                {
                    lblStatus.Text = "Der er sket en fejl - Alle artikler skal være valgt!";
                    btnUdskriv.Enabled = false;
                    return;
                }
            }

            

            for (int i = 0; i < Tekstboxliste.Count; i++)
            {
                string navn = Convert.ToString(Tekstboxliste[i].cbobox.SelectedItem);
                for (int j = 0; j < ArtikelListe.Count; j++)
                {
                    if (navn == ArtikelListe[j].Beskrivelse)
                    {
                        double pris = ArtikelListe[j].Pris;
                        Tekstboxliste[i].pris.Text = Convert.ToString(pris) + " Kr/Stk";

                        double antalGangePris = (Convert.ToInt32(Tekstboxliste[i].txt.Text)) * pris;
                        Tekstboxliste[i].saml.Text = Convert.ToString(antalGangePris) + " Kr";
                        
                        koebssum = koebssum + antalGangePris;
                    }     
                }
            }

                dato = DateTime.Now;
                ITilbud itilbud = VandspareSystem.OpretTilbud(dato, koebssum, besparelse);

            for (int i = 0; i < Tekstboxliste.Count; i++)
            {
                string navn = Convert.ToString(Tekstboxliste[i].cbobox.SelectedItem);
                for (int j = 0; j < ArtikelListe.Count; j++)
                {
                    if (navn == ArtikelListe[j].Beskrivelse)
                    {
                        int antal = Convert.ToInt32(Tekstboxliste[i].txt.Text);

                        VandspareSystem.OpretTilbudsLinie(antal, ArtikelListe[j].Varenr);
                        btnUdskriv.Enabled = true;
                    }
                }
            }
            VandspareSystem.TilfoejTilbudsLinier();


            txtbespar.Text = Convert.ToString(besparelse);
            txttilbudspris.Text = Convert.ToString(koebssum);
            int tilbageBetTid = Convert.ToInt32(itilbud.Tilbagebetaling);
            txttilbagebetalingstid.Text = Convert.ToString(tilbageBetTid);
            lblStatus.Text = "Et tilbud er blevet oprettet!";

        }
 

        private void btnUdskriv_Click(object sender, EventArgs e)
        {
            try
            {
                TilbudsRapport frmtilbudsrapport = new TilbudsRapport(VandspareSystem, dato);
                frmtilbudsrapport.ShowDialog();
                this.BringToFront();

            }
            catch (Exception)
            {
                lblStatus.Text = "Vælg først materialer for alle installationer";
            }

        }

    }
}
